BigQueryとAmazon S3を接続するコネクションを構築してみる
Google Cloudデータエンジニアのはんざわです。
この記事では、BigQueryとAmazon S3を接続するコネクションをGUIから構築してみたいと思います。
コネクションを構築する目的
BigQueryとAmazon S3のコネクションを作成することでs3をデータソースとするBigLakeテーブルを作成することができます。
制限事項
s3をデータソースとするBigLakeテーブルを作成する場合、BigQuery Omniという機能を使用する必要があります。
2024年3月27日の時点でBigQuery Omniがサポートしているリージョンは以下の通りです。
まだまだサポートしているリージョンが少なく、東京リージョンもサポートしておりません...
今後のアップデートに期待です!
リージョンの詳細 | リージョン名 | 同一のBQリージョン |
---|---|---|
AWS - US East (N. Virginia) | aws-us-east-1 | us-east4 |
AWS - US West (Oregon) | aws-us-west-2 | us-west1 |
AWS - Asia Pacific (Seoul) | aws-ap-northeast-2 | asia-northeast3 |
AWS - Europe (Ireland) | aws-eu-west-1 | europe-west1 |
AWS側の操作
早速、コネクションの構築を試してみたいと思います。
構築の手順は以下の公式ドキュメントを参考にしています。
s3バケットの作成
コンソールのサービス一覧からs3を選択し、バケットを作成
を選択します。
バケットの名前をcm-bigquery-omni-test
とし、リージョンはus-east-1
に設定しています。
それ以外の設定はデフォルトでバケットを作成しました。
BigQueryのAWS IAMポリシーを作成
コンソールからIAM
を選択し、ポリシー
を選択します。
続いて、ポリシーを作成
を選択します。
ポリシーエディタの右にあるJSON
を選択し、以下の内容を入力し、次へ
を選択します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::cm-bigquery-omni-test" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::cm-bigquery-omni-test", "arn:aws:s3:::cm-bigquery-omni-test/*" ] } ] }
最後にポリシー名をbq_omni_read_only
とし、それ以外はデフォルトのままポリシーを作成
を選択します。
BigQueryのAWS IAMロールを作成
コンソールからIAM
を選択し、ロール
を選択します。
続いて、ロールを作成
を選択します。
信頼されたエンティティタイプにウェブアイデンティティ
を選択し、アイデンティティプロバイダーにGoogle
を選択します。
Audienceはとりあえず00000
と入力し、次へ
を選択します。この値はあとで変更します。
BigQueryのAWS IAMポリシーの作成のセクションで作成したbq_omni_read_only
のポリシーを検索し、チェックを入れ、次へ
を選択します。
最後にロール名をBQ_Read_Only
とし、それ以外はデフォルトのままロールを作成
を選択します。
作成したIAMロールのIDはGoogle Cloud側の設定をする際に使用するので控えておきましょう。
例: arn:aws:iam::<AWS_ACCOUNT_ID>:role/BQ_Read_Only
これでAWS側の設定は終了です。
続いて、Google Cloud側の設定を進めます。
Google Cloud側の操作
BigQuery Connectionsを作成
BigQuery Studioのコンソールから追加
を選択し、さらに外部データソースへの接続
を選択します。
接続タイプにAWS上のBigLake(BigQuery Omni 経由)
を選択し、リージョンはs3と同じus-east-1
を選択しました。
また、接続IDは適当にbq-s3-connection-test
とし、AWSロールIDに先ほど控えたIAMロールのIDを入力し、接続を作成
を選択します。
作成したコネクションは以下の通りでBigQuery Google ID
は後ほど使用するので控えておきましょう。
もう一度AWS側の操作
IAM ロールに信頼関係を追加
再度、コンソールからIAM
を選択し、ロール
を選択し、BigQueryのAWS IAMロールを作成で作成したIAMロールを選択します。
続いて、赤枠の編集
を選択します。
最大セッション時間を1時間から12時間に変更します。
これにより、最大で12時間かかるクエリを実行できるようになります。
BigQueryで各クエリは最大で6時間実行することが可能で、12時間に設定することで再試行を1回実行できる見込みとなっています。
さらに信頼関係
のページを開き、信頼ポリシーを編集
を選択します。
以下のようにaccounts.google.com:aud
の箇所を先ほど控えたBigQuery Google ID
に書き換え、ポリシーを更新
を選択します。
まとめ
今回の記事では、BigQueryとAmazon S3を接続するコネクションを構築してみました。
次回以降はs3と接続したBigLakeテーブルでBigQueryからs3バケットのソースデータに直接クエリを実行してみたいと思います。